package com.hejia.alauda.persistence.mybatis;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.hejia.alauda.entity.PopularizeCount;
import com.hejia.alauda.entity.PopularizeVisit;
import com.hejia.alauda.persistence.BaseMapper;

public interface PopularizeVisitMapper extends BaseMapper<PopularizeVisit> {
	
	/**
	 * 统计大类总数
	 * @param startDate	开始时间
	 * @param endDate	结束时间
	 * @return			大类总数
	 */
	int countByBiggerCategoryAndDateTotalCount(Map<String, Object> map);
	
	/**
	 * 统计注册用户数
	 * @param biggerCategoryIds	稍大类别ID列表
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countUserRegisterByBiggerCategorysAndDate(
			@Param("biggerCategoryIds") List<Long> biggerCategoryIds,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);
	
	/**
	 * 统计指定大类在指定时间访问和实名认证的用户数量
	 * @param biggerCategoryIds	稍大类别ID列表
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countRealNameUserByBiggerCategorysAndDate(
			@Param("biggerCategoryIds") List<Long> biggerCategoryIds,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);
	
	/**
	 * 统计指定大类在指定时间访问和下单数量
	 * @param biggerCategoryIds	稍大类别ID列表
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countOrderByBiggerCategorysAndDate(
			@Param("biggerCategoryIds") List<Long> biggerCategoryIds,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);
	
	/**
	 * 统计指定大类在指定时间访问和支付订单数量
	 * @param biggerCategoryIds	稍大类别ID列表
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countPaidOrderByBiggerCategorysAndDate(
			@Param("biggerCategoryIds") List<Long> biggerCategoryIds,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定大类在指定时间访问和注册的用户数量
	 * @param biggerCategoryId 大类ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countUserRegisterByBiggerCategoryIdAndDate(
			@Param("biggerCategoryId") Long biggerCategoryId, 
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定大类在指定时间访问和实名认证的用户数量
	 * @param biggerCategoryId 大类ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countRealNameUserByBiggerCategoryIdAndDate(
			@Param("biggerCategoryId") Long biggerCategoryId, 
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定大类在指定时间访问和下单数量
	 * @param biggerCategoryId 大类ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countOrderByBiggerCategoryIdAndDate(
			@Param("biggerCategoryId") Long biggerCategoryId, 
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定大类在指定时间访问和支付订单数量
	 * @param biggerCategoryId 大类ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countPaidOrderByBiggerCategoryIdAndDate(
			@Param("biggerCategoryId") Long biggerCategoryId, 
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定类别和时间的注册数
	 * @param categoryId 类别ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countUserRegisterByCategoryIdAndDate(
			@Param("categoryId") Long categoryId,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定类别和时间的实名认证数
	 * @param categoryId 类别ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countRealNameUserByCategoryIdAndDate(
			@Param("categoryId") Long categoryId,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定类别和时间的下单数
	 * @param categoryId 类别ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countOrderByCategoryIdAndDate(
			@Param("categoryId") Long categoryId,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定类别和时间的支付数
	 * @param categoryId 类别ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countPaidOrderByCategoryIdAndDate(
			@Param("categoryId") Long categoryId,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定大类和时间的下单支付用户数
	 * @param biggerCategoryIds	稍大类别ID列表
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countPaidUserByBiggerCategorysAndDate(
			@Param("biggerCategoryIds") List<Long> biggerCategoryIds,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定大类和时间的下单支付金额
	 * @param biggerCategoryIds	稍大类别ID列表
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countPaymentAmountBiggerCategorysAndDate(
			@Param("biggerCategoryIds") List<Long> biggerCategoryIds,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计下单支付用户数
	 * @param biggerCategoryId	稍大类别ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countPaidUserByBiggerCategoryIdAndDate(
			@Param("biggerCategoryId") Long biggerCategoryId,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计下单支付金额
	 * @param biggerCategoryId	稍大类别ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countPaymentAmountByBiggerCategoryIdAndDate(
			@Param("biggerCategoryId") Long biggerCategoryId,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定类别和时间的下单支付用户数
	 * @param categoryId 类别ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countPaidUserByCategoryIdAndDate(
			@Param("categoryId") Long categoryId,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定类别和时间的下单支付金额
	 * @param categoryId 类别ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countPaymentAmountByCategoryIdAndDate(
			@Param("categoryId") Long categoryId,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);

	/**
	 * 统计指定类别和时间的访问IP数
	 * @param biggerCategoryIds 大类ID列表
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countVisitIPByBiggerCategorysAndDate(
			@Param("biggerCategoryIds") List<Long> biggerCategoryIds, 
			@Param("startDate") Date startDate, 
			@Param("endDate") Date endDate);

	/**
	 * 统计指定类别和时间的访问IP数
	 * @param biggerCategoryId	大类ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countVisitIPByBiggerCategoryIdAndDate(
			@Param("biggerCategoryId") Long biggerCategoryId, 
			@Param("startDate") Date startDate, 
			@Param("endDate") Date endDate);

	/**
	 * 统计指定类别和时间的访问IP数
	 * @param categoryId	类别ID
	 * @param startDate 开始日期
	 * @param endDate	结束日期
	 * @return
	 */
	List<PopularizeCount> countVisitIPByCategoryIdAndDate(
			@Param("categoryId") Long categoryId,
			@Param("startDate") Date startDate,
			@Param("endDate") Date endDate);
}
